[id].vue 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. <template>
  2. <main>
  3. <p>Edit :{{ file }}</p>
  4. <form @submit.prevent="" class="my-3">
  5. <input v-model="file.name" type="text" />
  6. <select v-model="file.status">
  7. <option value="PENDING">Pending</option>
  8. <option value="READY">Ready</option>
  9. <option value="DELETED">Deleted</option>
  10. <option value="ERROR">Error</option>
  11. </select>
  12. <button @click="cancelAndGoBack">Annuler</button>
  13. <button type="submit" value="Enregistrer" @click="save">Enregistrer</button>
  14. <button type="submit" value="Supprimer" @click="deleteAndGoBack" class="mt-5">Supprimer</button>
  15. </form>
  16. </main>
  17. </template>
  18. <script setup lang="ts">
  19. import {useEntityManager} from "~/composables/data/useEntityManager";
  20. import {ref, Ref} from "@vue/reactivity";
  21. import ApiResource from "~/models/ApiResource";
  22. import {File} from "~/models/Core/File";
  23. const route = useRoute()
  24. const id: Ref<number> = ref(parseInt(route.params.id as string))
  25. const em = useEntityManager()
  26. //@ts-ignore
  27. let file: ApiResource = reactive(await em.fetch(File, id.value))
  28. const save = async () => {
  29. console.log('save')
  30. //@ts-ignore
  31. await em.persist(File, file)
  32. navigateTo('/poc')
  33. }
  34. const cancelAndGoBack = async () => {
  35. if (em.isNewEntity(File, id.value)) {
  36. await em.delete(File, file)
  37. } else {
  38. em.reset(File, file)
  39. }
  40. navigateTo('/poc')
  41. }
  42. const deleteAndGoBack = async () => {
  43. await em.delete(File, file)
  44. navigateTo('/poc')
  45. }
  46. </script>
  47. <style>
  48. a {
  49. color: blue;
  50. cursor: pointer;
  51. }
  52. a:hover {
  53. text-decoration: underline;
  54. }
  55. button {
  56. border: grey solid 1px;
  57. padding: 5px;
  58. margin: 5px;
  59. cursor: pointer;
  60. }
  61. button:hover {
  62. text-decoration: underline;
  63. }
  64. button:focus {
  65. background-color: lightgrey;
  66. }
  67. form {
  68. display: flex;
  69. flex-direction: column;
  70. max-width: 500px;
  71. }
  72. </style>